package com.kty.cesuan.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.kty.cesuan.config.R;
import com.kty.cesuan.pojo.Qmdj;
import com.kty.cesuan.service.SjqmService;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/sjqm")
public class SjqmController {

    @Autowired
    private SjqmService sjqmService;

//**********************************************************************************************************************

    /**
     * 按照当前公历日期测算
     */
    @GetMapping("/now")
    public R<String> now() {

        // 现时测算
        if(sjqmService.now()){
            // 返回结果
            return R.success("现时测算成功！");
        }
        return R.error("已有日期范围相同的测算数据！");

    }

    /**
     * 以当前时间按为基础向前推算
     */
    @GetMapping("/up")
    public R<String> up() {

        //  以当前时间按为基础向前推算
        if(sjqmService.up()){
            // 返回结果
            return R.success("测算成功！");
        }
        return R.error("已有日期范围相同的测算数据！");

    }

    /**
     * 以当前时间按为基础向后推算
     */
    @GetMapping("/down")
    public R<String> down() {

        // 以当前时间按为基础向后推算
        if(sjqmService.down()){
            return R.success("测算成功！");
        }
        return R.error("已有日期范围相同的测算数据！");

    }

    /**
     * 重置为当前时间
     */
    @GetMapping("/reset")
    public R<String> reset() {

        // 以当前时间按为基础向后推算
        if(sjqmService.reset()){
            // 返回结果
            return R.success("时间重置成功！");
        }

        // 返回结果
        return R.error("无法重复 重置时间");

    }

    /**
     * 按照指定日期测算
     *
     * @param date 日期+标识
     */
    @GetMapping("/choice")
    public R<String> choice(String date) {

        // 按 “-” 切割接收到的日期
        String[] split = date.split("-");
        // 判断日期是否为空
        if ("null".equals(split[0])) {
            // 返回页面提示
            return R.error("请选择日期！");
        } else {
            int year = Integer.parseInt(split[0]);
            int month = Integer.parseInt(split[1]);
            int day = Integer.parseInt(split[2]);
            int time = Integer.parseInt(split[3]);
            int minute = Integer.parseInt(split[4]);
            int second = Integer.parseInt(split[5]);
            int choice = Integer.parseInt(split[6]);

            // 测算
            if(sjqmService.choice(year, month, day, time, minute, second, choice)){
                return R.success("指定日期测算成功！");
            }
        }
        return R.error("已有日期范围相同的测算数据！");

    }

    /**
     * 查询记录
     * <p>
     * //     * @param page     页数
     * //     * @param pageSize 每页条数
     * //     * @param date     时间
     *
     * @return 信息
     */
    @GetMapping("/page")
    public R<Page<Qmdj>> page(int page, int pageSize, String lunarDate) {

        // 1、分页构造
        Page<Qmdj> pageInfo = new Page<>(page, pageSize);

        // 2、条件构造（封装构造条件）
        LambdaQueryWrapper<Qmdj> qw = new LambdaQueryWrapper<>();
        // 2.1、过滤条件：判断日期是否为空，不为空则添加（模糊查询）
        qw.like(StringUtils.isNotEmpty(lunarDate), Qmdj::getLunarDate, lunarDate);
        // 2.1、排序条件：根据操作时间降序
        qw.orderByDesc(Qmdj::getCreateTime);

        sjqmService.page(pageInfo, qw);

        // 返回结果
        return R.success(pageInfo);

    }

    /**
     * 删除
     *
     * @return 成功
     */
    @DeleteMapping
    public R<String> delete(Long id) {

        // 1、删除
        sjqmService.removeById(id);

        // 2、返回成功
        return R.success("删除成功！");

    }

}
